require 'rubygems'
require 'sinatra'
require 'mysql'
require 'json'

$host = 'localhost'
$user = 'root'
$passwd = 'root'
$db = 'gtc'
rango=0.04

def get_usuario(query)
  conn = Mysql.new($host, $user, $passwd)
  res = conn.query(query)
  $response = ""
  while row = res.fetch_row do
    $response << "telefono:#{row[0]},nombre:#{row[1]},ip:#{row[2]},puerto:#{row[3]},dispositivo:#{row[4]},rol:#{row[5]},lat_ini:#{row[6]},lon_ini:#{row[7]},lat_fin:#{row[8]},lon_fin:#{row[9]},fecha_hora:#{row[10]},num_asientos:#{row[11]},estado:#{row[12]} \n"    
  end
  res.free
  return $response.to_s
end

get '/' do
  "Methods: <br> "+
  '<a href="http://localhost:4567/get_usuario/5646546">get_usuario</a> <br>'+
  '<a href="http://localhost:4567/get_all_usuarios">get_all_usuarios</a> <br>'+
  '<a href="http://localhost:4567/get_all_conductores">get_all_conductores</a> <br> '+
  '<a href="http://localhost:4567/get_all_pasajeros">get_all_pasajeros</a> <br> ' +
  '<a href="http://localhost:4567/get_conductores_cercanos?lat_ini=-35.17408&lon_ini=-71.36256&lat_fin=-35.411875&lon_fin=-71.6531" >get_conductores_cercanos</a> <br>'+
  '<a href="http://localhost:4567/get_pasajeros_cercanos?lat_ini=-34.9841&lon_ini= -71.2426&lat_fin=-35.4119&lon_fin=-71.6585" >get_pasajeros_cercanos</a> <br>'+
  'set_conductor_estado PUT(telefono/estado/num_asientos) <br>'+
  'set_pasajero_estado>set_pasajero_estado PUT(telefono/estado)';
end


get '/get_usuario/:telefono' do  
  telefono = params[:telefono]
  query ="select * from  gtc.usuario where telefono='#{telefono}';"
  get_usuario(query)
end
          
get '/get_all_usuarios' do  
  query ="select * from  gtc.usuario;"
  get_usuario(query)
end

get '/get_all_conductores' do  
  query = "select * from  gtc.usuario where rol='conductor';"
  get_usuario(query)
end

get '/get_all_pasajeros' do  
  query = "select * from  gtc.usuario where rol='pasajero';"
  get_usuario(query)
end

    
    
get '/get_conductores_cercanos' do  
  lat_ini = params[:lat_ini]
  lat_fin = params[:lat_fin]
  lon_ini = params[:lon_ini]
  lon_fin = params[:lon_fin]
  query = "select * from  gtc.usuario where rol='conductor' and num_asientos>'0' and estado='1' and "+
  "(lat_ini between '#{lat_ini.to_f-rango}' and '#{lat_ini.to_f+rango}') and "+
  "(lon_ini between '#{lon_ini.to_f-rango}' and '#{lon_ini.to_f+rango}') and "+
  "(lon_fin between '#{lon_fin.to_f-rango}' and '#{lon_fin.to_f+rango}') and "+
  "(lat_fin between '#{lat_fin.to_f-rango}' and '#{lat_fin.to_f+rango}')";
  get_usuario(query)
end

get '/get_pasajeros_cercanos' do  
  lat_ini = params[:lat_ini]
  lat_fin = params[:lat_fin]
  lon_ini = params[:lon_ini]
  lon_fin = params[:lon_fin]
  query = "select * from  gtc.usuario where rol='pasajero' and estado='1' and "+
  "(lat_ini between '#{lat_ini.to_f-rango}' and '#{lat_ini.to_f+rango}') and "+
  "(lon_ini between '#{lon_ini.to_f-rango}' and '#{lon_ini.to_f+rango}') and "+
  "(lon_fin between '#{lon_fin.to_f-rango}' and '#{lon_fin.to_f+rango}') and "+
  "(lat_fin between '#{lat_fin.to_f-rango}' and '#{lat_fin.to_f+rango}')";
  get_usuario(query)
end

get '/set_conductor_estado/:telefono/:estado/:num_asientos' do
  puts params
  num_asientos  = params[:num_asientos]
  estado        = params[:estado]
  telefono      = params[:telefono]
  conn = Mysql.new($host, $user, $passwd) 
  res = conn.query("UPDATE gtc.usuario SET num_asientos = '#{num_asientos}', estado='#{estado}' WHERE telefono ='#{telefono}' ;")
  puts conn.affected_rows.to_s
end

get '/set_pasajero_estado/:telefono/:estado' do
  puts params
  conn = Mysql.new($host, $user, $passwd)
  estado        = params[:estado]
  telefono      = params[:telefono]
  res = conn.query("UPDATE gtc.usuario SET estado='#{estado}' WHERE telefono ='#{telefono}' ;")
  puts telefono.to_s
  puts conn.affected_rows.to_s
end
